package com.qst.biz;

import com.qst.dao.PoliceOffice;
import com.qst.entity.Animal;
import com.qst.entity.ZootopiaAction;

import java.util.Arrays;
import java.util.Scanner;



//导入系统类
//导入警察局接口
//导入动物实体类
//导入动物城管理局行动抽象类

public class Zootopia extends ZootopiaAction implements PoliceOffice{
    public String name; // 动物名称
    public String action; // 动物行为
    public String condition; // 动物状态，初始默认为正常，继承接口后随机更改为狂暴
    //入驻的动物城的动对象
    private Animal animal;
    //构造函数-01
    public Zootopia(String name, String action, String condition) {
        this.name = name;
        this.action = action;
        this.condition = condition;
    }
    //构造函数-02
    public Zootopia(Animal animal) {
        this.animal = animal;
    }
    /**
     * 查找到真凶后的动物城回调事件
     * @param animalcity 动物城对象
     */
    @Override
    public void seekCallBack(Zootopia[] animalcity) {
        if (flag) { // 如果找到
            System.out.println("根据线索找到了:" +
                    animalcity[realCrazyAnimalIndex].name + "  该动物状态为："
                    + animalcity[realCrazyAnimalIndex].condition);
            System.out.println("请控制住该动物，同时选择报警！");
            System.out.println();
        }
    }
    /**
     * 查询某动物的线索，即返回要查询的动物的名称和行为
     * @param animalcity 动物城所有成员
     * @return 返回要询问的动物的索引ID
     */
    public int queryAnimal(Zootopia[] animalcity) {
        System.out.println("可询问的动物列表如下");
        int a = 0;
        for (int i = 0; i < animalcity.length; i++) {
            a = i + 1;
            System.out.print(a + "、" + animalcity[i].name + "  ");
        }
        System.out.println();
        System.out.print("您选择询问：");
        int no = input.nextInt();
        for (int i = 0; i < animalcity.length; i++) {
            a = i + 1;
            if (no == a) {
                System.out.print(a + "、" + animalcity[i].name + " ");
                System.out.println("该动物:" + animalcity[no - 1].action);
                break;
            }
        }
        return no;
    }
    /**
     * 查找真正的疯狂动物
     *
     * @param animalcity 动物城成员
     * @param index 疯狂动物索引
     * @return 返回疯狂动物的索引
     */
    public int searchCrazyAnimal(Zootopia[] animalcity, String index) {
        int i;
        for (i = 0; i < animalcity.length; i++) {
            if (index.equals(animalcity[i].condition)) {
                realCrazyAnimalIndex = i;
                break;
            }
        }
        //代表找到真凶
        flag = true;
        //找到真凶后的回调事件
        seekCallBack(animalcity);
        return i;
    }
    /**
     * 新增动物城成员
     * @param animalcity 动物城
     * @return 返回新增动物后的动物城
     */
    public Zootopia[] animalEnter(Zootopia[] animalcity) {
        System.out.println("请输入该动物姓名、行为特征(在下一行输入)：");
        //新增动物的名称
        String name = input.next();
        //新增动物的行为
        String action = input.next();
        //新增动物的状态（默认均为正常）
        String condition = "正常";
        //创建Animal类实例
        Animal animal = new Animal(name, action, condition);
        //赋值animalcidy动物数组对象（添加一空Animal对象）
        animalcity = Arrays.copyOf(animalcity, animalcity.length + 1);
        //定义一个没有赋值的Animal实例
        animalcity[animalcity.length - 1] = new Zootopia(animal);
        //给新增加的动物相关属性赋值
        animalcity[animalcity.length - 1].name = animal.getName();
        animalcity[animalcity.length - 1].action = animal.getAction();
        animalcity[animalcity.length - 1].condition = animal.getCondition();
        return animalcity;
    }
    /**
     * 查找到真凶后的动物城回调事件
     * @param animalcity 动物城对象
     */

    /**
     * 动物城管理局报警
     */
    @Override
    public void call110() {
        System.out.println("报警：警察同志么，我们发现了一个疯狂动物，请马上派人过来抓捕！");
    }
    /**
     * 实现 PoliceOffice 接口，警察立案
     * @return true:代表接受报案，False：代表没有接受报案
     */
    @Override
    public boolean acceptCase() {
        System.out.println("接受报案......");

        return true;
    }
    /**
     * 实现 PoliceOffice 接口，警察出警
     * @return true:代表行动开始抓捕行动，False：代表没有实施行动
     */
    @Override
    public boolean action() {
        System.out.println("立即行动，开始抓捕行动.....");
        return true;
    }
    /**
     * 实施抓捕行动 （PoliceOffice接口的实现类）
     * @param i  要抓捕的嫌犯的索引
     * @param animalcity 抓捕的范围是动物城所有动物成员
     * @return true 代表抓到嫌犯
     */
    @Override
    public boolean arrest(int i, Zootopia[] animalcity) {
        boolean flag2 = false;
        if (flag) {
            flag2 = true;
            System.out.println("警局出动！牛警长逮捕了疯狂的" + animalcity[i].name);
            for (int j = i; j < animalcity.length - 1; j++) {
                animalcity[j].name = animalcity[j + 1].name;
                animalcity[j].action = animalcity[j + 1].action;
                animalcity[j].condition = animalcity[j + 1].condition;
            }
            animalcity[animalcity.length - 1].name = null;
            animalcity[animalcity.length - 1].action = null;
            animalcity[animalcity.length - 1].condition = null;
        } else {
            System.out.println("证据不足，再去找找吧");
            System.out.println();
        }
        return flag2;
    }


    /**
     * 遍历动物城中的动物
     * @param animalcity 动物城中的动物数组
     */

    /**
     * 修改动物城中的某动物信息
     * @param animalcity 动物城对象
     */
    public void listAnimal(Zootopia[] animalcity) {
        for (Zootopia zootopia : animalcity) {
            System.out.println(zootopia.name + "\t" +
                    zootopia.action + "\t" + "**状态保密！**");
        }
    }
    public void modifyAnimal(Zootopia[] animalcity) {
        System.out.println("可修改的动物列表如下");
        int a = 0;
        for (int i = 0; i < animalcity.length; i++) {
            a = i + 1;
            System.out.print(a + "、" + animalcity[i].name + "  ");
        }
        System.out.println();
        System.out.print("请输入将要修改的动物编号(1~" +
                animalcity.length + "尼克除外):");
        for (int i = 0; i < 1; i++) {
            int v1 = input.nextInt();
            if (v1 >= 0 && v1 <= animalcity.length && v1 != 8) {
                System.out.println("请输入该动物姓名、行为特征(在下一行输入): ");
                String name2 = input.next();
                String action2 = input.next();
                animalcity[v1 - 1].name = name2;
                animalcity[v1 - 1].action = action2;
            } else {
                System.out.println("请输入1~" + animalcity.length + ",8是尼克,不能输入！");
                i--;
            }
        }
    }


    //创建控制台输入对象
    public static final Scanner input = new Scanner(System.in);
    //是否找到嫌犯（true:代表找到，false:代表没有找到）
    public boolean flag = false;
    //保存疯狂动物索引ID（嫌犯索引ID）
    private int realCrazyAnimalIndex = -1;


    }




/**
 *
 * @author qst 动物城管理类
 * 该类继承 ZootopiaAction 抽象类并实现 PoliceOffice 接口
 */



